From: Dan Winship Date: Tue, 5 Apr 2011 20:17:52 +0000 (-0400) Subject: st_label_set_text: no-op if the text is unchanged X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~8346 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=a56bc9d933c4e863854059f92346bf307ff18c6d;p=gnome-shell.git st_label_set_text: no-op if the text is unchanged If a caller sets an StLabel's text to what it already is (as, eg, the clock menu does), do nothing. Unless the label is editable, in which case, setting the text has a visible side effect (dropping the selection), so we don't optimize that out. https://bugzilla.gnome.org/show_bug.cgi?id=645648 --- diff --git a/src/st/st-label.c b/src/st/st-label.c index 1d9b13d0e..ce1130498 100644 --- a/src/st/st-label.c +++ b/src/st/st-label.c @@ -376,21 +376,27 @@ st_label_set_text (StLabel *label, const gchar *text) { StLabelPrivate *priv; + ClutterText *ctext; g_return_if_fail (ST_IS_LABEL (label)); g_return_if_fail (text != NULL); priv = label->priv; + ctext = CLUTTER_TEXT (priv->label); - if (priv->text_shadow_material != COGL_INVALID_HANDLE) + if (clutter_text_get_editable (ctext) || + g_strcmp0 (clutter_text_get_text (ctext), text) != 0) { - cogl_handle_unref (priv->text_shadow_material); - priv->text_shadow_material = COGL_INVALID_HANDLE; - } + if (priv->text_shadow_material != COGL_INVALID_HANDLE) + { + cogl_handle_unref (priv->text_shadow_material); + priv->text_shadow_material = COGL_INVALID_HANDLE; + } - clutter_text_set_text (CLUTTER_TEXT (priv->label), text); + clutter_text_set_text (ctext, text); - g_object_notify (G_OBJECT (label), "text"); + g_object_notify (G_OBJECT (label), "text"); + } } /**